|
Date : 4 aout 1991 Protection : MOT DE PASSE Programme : STRATEGO Outils : SOFT-ICE V2.50, MASM, QUAID, EXE2BIN. Fichier : STRATEGO.EXE, FRED4.COM Temps pass� : 1 HEURE Soci�t� : ACCOLADE Divers : CREATION DU FICHIER FRED4.COM Origine : INDONESIE Num�ro : 118 On trouve relativement facilement l'endroit � alt�rer dans le fichier STRATEGO.EXE, il s'agit du saut suivant; 983D:040D 3D0100 CMP AX,0001 983D:0410 7563 JNZ 0475 ; SAUTE SI MAUVAISE REPONSE... 983D:0412 B84000 MOV AX,0040 Donc il s'agit uniquement de forcer le saut se trouvant en CS:0410 en 0412 par un JMP 0412 ( EB00 ). Malheureusement cette chaine ne se trouve pas en clair. Je visualise l'ent�te du fichier pour m'apercevoir que c'est un fichier compact� par LZ91. Je d�compacte sur le champ mais cette fois-ci "on" me dit que le d�com- pactage ne peut fonctionner car ce fichier � l'air de contenir des overlays !!! Que reste-t-il � faire ? d�tourner une interruption et modifier le code en CS:0410 par un 74, ou un EB00. Je lance QUAID pour voir quelle interruption s'approche le plus de la demande de mot de passe. Il s'agit de l'INT 21 sous-fonction 49, mais ce n'est qu'au bout de la troisi�me fois que cette interruption est appel�e que la routine demandant le mot de passe est mise en place... ceci n'est pas trop g�nant il s'agira d�s lors de POPer le stack et de tester la position 0410 pour voir si elle contient 75. ; PATCH POUR LE PROGRAMME STRATEGO 3 aout 1991 ; FREDDY_SOFT code segment org 100h assume cs:code start: jmp installe ; On va installer la routine r�sidente... cr equ 0dh lf equ 0ah flag equ 49h ; Contenu de AH devant �tre test�. adr_ip equ 0410h ; En ES:0410 il suffit de mettre 74. patch equ 74h ; � mettre � la place de 75 en ES:0410h instok db cr,lf,' D�tournement de l',39,'INT 21 sous-fonction 49' db cr,lf db ' ....FREDDY_SOFT....','$' drap db 0,0 elimine db cr,lf,'J',39,'ai en principe tout remis en l',39,'�tat....' db cr,lf,'$' int21 label dword ; sauvegarde des adresses SEG:OFF de l'INT21 d'origine i40off db 0,0 ; OFFSET i40seg db 0,0 ; SEGMENT tsrint40 proc far jmp short apr�s_id db 'FR' ; On intercalle au d�but du code un identificateur apr�s_id: pushf push ds push ax cmp byte ptr [drap],1 ; Si 1 on devient transparent. jz suite ; Saut � l'INT 21 toutes fonctions valid�es. cmp ah,flag ; AH = 49. jnz suite ; Si non on traite les INT 21 normalement. push dx ; Transfert de DX dans DS ( �conomie de 2 inst.) pop ds ; Dans ce cas je peux PUSHER et POPER puisque je ne ; touche pas � SP. cmp byte ptr ds:[adr_ip],75h jnz suite ; si c'est pas bon on sort. mov byte ptr ds:[adr_ip],patch mov byte ptr [drap],1h suite: pop ax ; On restaure tous les registres. pop ds popf jmp int21 ; Appel de l'INT21 officielle. tsrint40 endp eor: ; ROUTINE D'INSTALLATION installe: mov ax,3521h int 21h cmp word ptr es:[bx+2],'RF' ; On teste la pr�sence de la signature. je away ; si pr�sent on d�sinstalle. mov ax,cs ; CS --> DS mov ds,ax ; DS = CS mov ax,3521h ; on detourne l'int 21h. int 21h ; sous-fonction 35. mov word ptr [i40off],bx ; L'offset se retrouve en BX. mov i40seg,es ; Le segment en ES. mov ax,2521h ; Et on met l'ad. du resident mov dx,offset tsrint40 ; sous-fonction 25 dont SEG:OFF se int 21h ; trouve en DX <---( tsrint40 ). mov dx,offset instok ; Offset du message de fin. mov ah,09 ; Sorti du message... int 21h mov ah,07 ; Attente d'un caract�re au clavier. int 21h mov dx,eor-start+100h+15 ; On r�serve la m�moire qui doit rester mov cl,4 ; en r�sident: DEBUT code - FIN code + shr dx,cl ; 100h + 15. ( 100h car les zones data mov al,0 ; sont plac�es de 0 � 100h dans un com. ; Puis d�calage de 4 � droite pour avoir ; le r�sultat en nombre de paragraphe ; + 1 ( ou + 15 comme ci-dessus ). mov ah,31h ; Sortie et reservation int 21h ; de la m�moire. away: mov dx,word ptr es:i40off ; Restauration de OFF:SEG de l'INT 21 mov ax,word ptr es:i40seg ; d'origine. mov ds,ax mov ax,2521h ; Set vecteur de l' INT 21 int 21h mov bx,es mov es,es:[2ch] mov ah,49h ; On lib�re la m�moire. int 21h mov es,bx mov ah,49h int 21h push cs ; Mettre CS dans DS pop ds mov dx,offset elimine ; pointe sur d�but du message. xor al,al mov ah,9 int 21h ; Sortir message. mov ah,4ch int 21h ; On revient au DOS. code ends end start |